
// Source File Name:   ENCommonImpl.java

package com.sunwayhorizo.health.hl7.datatypes.common;

import com.sunwayhorizo.health.hl7.common.Hl7Exception;
import com.sunwayhorizo.health.hl7.datatypes.ANY;
import com.sunwayhorizo.health.hl7.datatypes.BL;
import com.sunwayhorizo.health.hl7.datatypes.CS;
import com.sunwayhorizo.health.hl7.datatypes.EN;
import com.sunwayhorizo.health.hl7.datatypes.ENXP;
import com.sunwayhorizo.health.hl7.datatypes.IVL_TS;
import com.sunwayhorizo.health.hl7.datatypes.SET_CS;
import com.sunwayhorizo.health.hl7.datatypes.ST;

import java.util.Iterator;
import java.util.List;


//            LIST_ENXPAdapterImpl, ANYImpl, BLImpl, ENXPImpl,
//            IVL_TSImpl, LISTAdapterCommonImpl, NullFlavorImpl, SETCommonImpl, 
//            SET_CSImpl, STCommonImpl, STImpl

public abstract class ENCommonImpl extends LIST_ENXPAdapterImpl
    implements EN
{

    public static final String RCS_ID = "$Header: ENCommonImpl.java 115.23.2050.2 2005/10/18 06:49:08 mvarman noship $";
    protected SET_CS _use;
    protected IVL_TS _validTime;
    protected ST _formatted;

    protected ENCommonImpl(List list, SET_CS set_cs, IVL_TS ivl_ts)
    {
        super(list);
        _use = set_cs;
        _validTime = ivl_ts;
        _formatted = STImpl.nullST(NullFlavorImpl.NI);
    }

    protected ENCommonImpl(CS cs)
    {
        super(cs);
        _use = SET_CSImpl.nullSET_CS(NullFlavorImpl.NI);
        _validTime = IVL_TSImpl.nullIVL_TS(NullFlavorImpl.NI);
        _formatted = STImpl.nullST(NullFlavorImpl.NI);
    }
    

    protected ENCommonImpl(CS cs, SET_CS _use, IVL_TS _validTime, ST _formatted)
    {
        super(cs);
        this._use = _use;
        this._validTime = _validTime;
        this._formatted = _formatted;
    }

    protected ENCommonImpl()
    {
       
    }

    protected ENCommonImpl(List list, SET_CS set_cs, IVL_TS ivl_ts, ST st)
    {
        super(list);
        _use = set_cs;
        _validTime = ivl_ts;
        _formatted = st;
    }

    public SET_CS use()
    {
        if(isNull().isTrue())
            return SET_CSImpl.nullSET_CS();
        else
            return _use;
    }

    public IVL_TS validTime()
    {
        if(isNull().isTrue())
            return IVL_TSImpl.nullIVL_TS();
        else
            return _validTime;
    }

    public ST formatted()
    {
        return _formatted;
    }

    public BL equal(ANY any)
    {
        if(!(any instanceof EN))
            return BLImpl.FALSE;
        if(isNull().or(any.isNull()).isTrue())
            return BLImpl.FALSE;
        EN en = (EN)any;
        BL bl = length().equal(en.length());
        for(Iterator iterator = listIterator(); bl.isTrue() && iterator.hasNext(); bl = en.contains((ENXP)iterator.next()));
        return bl;
    }

    public int hashCode()
    {
        int i = 17;
        if(!isNull().isTrue())
            i += mList.hashCode();
        return i;
    }

//    public XMLNode[] writeXML(XMLDocument xmldocument, String s)
//        throws Hl7Exception
//    {
//        try
//        {
//            XMLElement xmlelement = (XMLElement)xmldocument.createElement(s);
//            if(use() != null && !use().isNull().isTrue())
//            {
//                XMLNode axmlnode[] = ((SET_CSImpl)use()).writeXML(xmldocument, "use");
//                xmlelement.setAttribute("use", axmlnode[0].getAttributes().getNamedItem("code").getNodeValue());
//            }
//            if(toList() != null)
//            {
//                for(Iterator iterator = toList().iterator(); iterator != null && iterator.hasNext();)
//                {
//                    ENXP enxp = (ENXP)iterator.next();
//                    if(((ENXPImpl)enxp).partType() != null)
//                        if(((ENXPImpl)enxp).partType().isNull().isFalse())
//                        {
//                            XMLNode xmlnode = ((ENXPImpl)enxp).writeXML(xmldocument, s)[0];
//                            if(xmlnode != null)
//                                xmlelement.appendChild(xmlnode);
//                        } else
//                        {
//                            String s1 = ((ENXPImpl)enxp).stringValue();
//                            if(s1 != null)
//                            {
//                                org.w3c.dom.Text text = xmldocument.createTextNode(s1);
//                                xmlelement.appendChild(text);
//                            }
//                        }
//                }
//
//            }
//            if(validTime() != null && !validTime().isNull().isTrue())
//                xmlelement.appendChild(((IVL_TSImpl)validTime()).writeXML(xmldocument, "validTime")[0]);
//            return (new XMLNode[] {
//                xmlelement
//            });
//        }
//        catch(Exception exception)
//        {
//            throw new Hl7Exception(exception);
//        }
//    }
}
